目标检测R-CNN系算法

简介

图像分类,检测及分割是计算机视觉领域的三大任务。图像分类模型是将图像划分为单个类别,通常对应于图像中最突出的物体。但是现实世界的很多图片通常包含不只一个物体,此时如果使用图像分类模型为图像分配一个单一标签其实是非常粗糙的,并不准确。对于这样的情况,就需要目标检测模型,目标检测模型可以识别一张图片的多个物体,并可以定位出不同物体(给出边界框)。

目标检测模型的主要性能指标是检测准确度和速度,对于准确度,目标检测还要考虑物体的定位准确性,而不单单是分类准确度。目前主流的目标检测算法主要是基于深度学习模型,其可以分成两大类:

  • two-stage检测算法,其将检测问题划分为两个阶段,首先产生候选区域,然后对候选区域进行校正和分类,这类算法的典型代表是基于候选区域的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等;
  • one-stage检测算法,其不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,比较典型的算法如YOLO和SSD。本文是介绍的是第一类two-stage检测算法中的R-CNN系算法——R-CNN,Fast R-CNN,Faster R-CNN,在一般情况下,two-stage算法准确度要优于one-stage检测算法。

R-CNN,即Regions with CNN features,R-CNN是基于候选区域方法的目标检测算法系列开山之作,论文首次将CNN方法引入目标检测领域,大大提高了目标检测效果,也改变了目标检测领域的主要研究思路,之后的Fast R-CNN、Faster R-CNN都是以它为基础。

在R-CNN中,每个候选区域都要单独送入CNN模型计算特征向量,这是非常费时的,为了减少候选区域使用CNN模型提取特征向量所消耗的时间,Fast R-CNN只对整张图像全区域进行一次特征提取,Fast R-CNN最大的贡献是让人们看到了在Region Proposal+CNN这一框架下对目标进行实时检测的希望,也为后来的Faster R-CNN做下了铺垫。

对于Fast R-CNN,其仍然需要selective search方法来生产候选区域,这是非常费时的。为了解决这个问题,Faster R-CNN模型引入了RPN (Region Proposal Network)直接产生候选区域。Faster R-CNN可以看成是RPN和Fast R-CNN模型的组合体。

R-CNN

在R-CNN未提出之前,对象检测这一问题基本是遵循着“设计手工特征(Hand-crafted feature)+分类器”的思路,而且由于存在着区域搜索的步骤,所以可以认为是计算机用一个小的矩形窗口不断在图像上滑动、缩放,然后用分类器预测当前滑动窗口所在区域是否存在一个感兴趣的对象。R-CNN利用图片经过CNN模型得到的特征向量代替传统手工计算特征,对目标检测能得到更好的结果。

R-CNN目标检测系统由三个模块组成。 第一个模块生成类别独立候选区域。这些候选区域定义了我们的检测器可用的候选边界框集合。第二个模块是从各个区域提取固定长度特征向量的大型卷积神经网络。 第三个模块是一组类别特定的线性SVM分类器。

对于一张图片,R-CNN基于selective search方法大约生成2000个候选区域,selective search方法是一种启发式搜索算法。它先通过简单的区域划分算法将图片划分成很多小区域,然后通过层级分组方法按照一定相似度合并它们,最后的剩下的就是候选区域,它们可能包含一个物体。生成的每个候选区域被修正成固定大小(227×227)并送入一个CNN模型中,最后得到一个4096维的特征向量。然后这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。R-CNN最后又训练了一个边界框回归模型,使用回归模型精细修正候选框位置,提升定位的准确性。

R-CNN网络对比传统的目标识别算法把检测问题转化为了分类问题,采用CNN模型进行特征提取,效果要比传统的手工提取特征方法更好。但R-CNN网络中,一张图经由selective search算法提取约2000个候选区域,每个候选区域都要单独送入CNN模型计算特征向量,这个操作是非常费时的。R-CNN网络训练过程分为提取候选区域、提取CNN特征、SVM分类和Bounding-box 回归等步骤,过于繁琐。R-CNN模型要求输入CNN网络进行提取特征的候选区域是固定尺寸,但其实像AlexNet CNN等网络在提取特征过程中对图像的大小并无要求,只是在提取完特征进行全连接操作的时候才需要固定特征尺寸,这部分也可以进行优化。

Fast R-CNN

针对R-CNN网络从候选区域提取特征向量耗时的问题,Fast R-CNN规避了R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取,用RoI pooling层取代最后一层max pooling层,对于每个候选区域, RoI pooling层可以从CNN特征图中得到一个固定长和宽的特征图(长和宽是超参数,论文中选用的尺寸为7×7),RoI pooling的原理很简单,其根据候选区域按比例从CNN特征图中找到对应的特征区域,然后将其分割成几个子区域(根据要输出的特征图的大小),然后在每个子区域应用max pooling,从而得到固定大小的特征图。Fast R-CNN网络使用SVD对全连接层进行分解,使用了两个不同的全连接层并行操作,可同时输出分类结果和窗口回归结果,减少了计算复杂度,加快检测速度,实现除特征提取阶段外端到端的训练模式,所有的特征都暂存在显存中,不需要额外的磁盘空间。

对Fast R-CNN网络输入一张任意大小的图片,基于selective search方法大约生成2000个候选区域,将图片输入CNN网络,经过若干卷积层与池化层,得到特征图,根据原图中候选区域到特征图映射关系,在特征图中找到每个候选区域对应的特征框,并在RoI池化层中将每个特征框池化到H×W(论文中采用的是7×7)的尺寸,H×W大小的特征框经过全连接层得到固定大小的特征向量,所得到的特征向量再经由SVD分解实现的不同全连接层并行操作,分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归,利用窗口得分分别对每一类物体进行非极大值抑制剔除重叠的候选区域,最终得到每个类别中回归修正后的得分最高的窗口。

Fast R-CNN相比于R-CNN网络训练速度得到了提高,准确度也略有提升,但其中采用selective search算法提取候选区域,占用了模型大量时间,(selective search算法候选区域提取需要2~3s,而提特征分类只需要0.32s),这还是无法满足目标检测在实时应用中的需求,而且Fast R-CNN网络并没有实现真正意义上的端到端训练模式。

Faster R-CNN

这里即为在文本定位算法的文章中用到的算法。

针对Fast R-CNN,使用selective search方法来生产候选区域,非常费时的问题。Faster R-CNN模型引入了区域生成网络RPN (Region Proposal Network),直接在特征图中提取候选区域,将特征提取,候选区域提取,Bounding-box窗口回归,分类都整合在了一个网络中,实现了端到端的检测模式,虽然训练阶段仍然要分多步,但是检测阶段非常方便快捷。Faster R-CNN可以看成是RPN和Fast R-CNN模型的组合体,RPN的主要思想是通过对应关系把特征图的点映射回原图,在每一个对应的原图设计不同的固定尺度窗口,根据该窗口与真实值的IOU给它正负标签,让它学习里面是否有目标。

对Fast R-CNN网络输入一张任意大小的图片,通过卷积和池化得到特征图。然后在这个特征图上采用一个N×N(文中是3×3)的卷积核,把每个卷积映射位置编码为一个短的(例如256维)特征向量,对于每个位置映射回原图的感受野的中心点当成一个基准点,然后围绕这个基准点选取k个不同大小的候选区域。输出候选区域的分类得分和回归边界。对于分类层,其输出大小是2k,表示各个候选区域包含物体或者是背景的概率值,而回归层输出4k个坐标值,表示各个候选区域的位置。对于每个滑窗位置,这两个全连接层是共享的。RPN采用卷积层来实现:首先是一个n×n卷积得到低维特征,然后是两个1×1的卷积,分别用于分类与回归。

Fast R-CNN抛弃了传统的滑动窗口和基于selective search的方法生成候选区域,直接使用RPN网络,能极大提升候选区域的生成速度,使得利用CNN在线对目标进行识别成为可能。

总结

本文介绍了R-CNN, Fast R-CNN, Faster R-CNN三种基于深度学习的目标检测算法。

R-CNN提出了Region Proposal+CNN这一框架,在PASCAL VOC挑战赛上取得了不错的成绩。Fast R-CNN在R-CNN的基础上用RoI pooling层取代最后一层max pooling层,使得输入图片尺寸大小没有限制,并使用SVD分解让分类和窗口回归在全连接层实现并行操作,减少了计算复杂度,加快检测速度。Faster R-CNN在Fast R-CNN的基础上引入RPN,将特征提取,候选区域提取,窗口回归,分类都整合在了一个网络中,真正意义上的实现了端到端的检测模式,进一步加快了模型的检测速度。

参考链接

瑾锋 wechat
心明录公众号